执行可执行文件 "No such file or directory" 您所在的位置:网站首页 bash 无法执行二进制文件 执行可执行文件 "No such file or directory"

执行可执行文件 "No such file or directory"

#执行可执行文件 "No such file or directory"| 来源: 网络整理| 查看: 265

原文链接:[bytefreaks.net][https://bytefreaks.net/gnulinux/how-to-find-the-program-interpreter-that-a-linux-application-requests]

最近,我们尝试执行一个应用程序,但出现以下错误:

-bash:./a.out:No such file or directory"

发生此错误的原因是我们的应用程序试图使用该机器上不可用的解释器。

我们使用了readelf显示有关ELF文件的信息(包括解释器信息)的实用程序来解决我们的问题。

具体来说,我们使用readelf -l ./a.out它来显示文件的段标题中包含的信息(如果有的话)。

(您可以-l用--program-headers或替换参数--segments,它们相同)。

从生成的数据中,我们仅需要以下行:

[Requesting program interpreter: /lib/ld-linux-armhf.so.3]

也可以使用以下命令:

readelf -p .interp a.out #示例输出 # [ 0] /lib64/ld-linux-x86-64.so.2

a.out是可执行文件的名称

所以我们用grep过滤掉所a.out有其它线路,然后cut和tr在后获取数据:字符(第二列),然后除去所有的空格和]从结果字符。 我们使用的完整和最终命令是:

readelf -l ./main | grep 'Requesting' | cut -d':' -f2 | tr -d ' ]'; 解决方案

如果此程序是你自己编译的话,可以通过两种方式修改:

编译时指定连接器

可以通过使用gcc,g++,添加参数-Wl,--dynamic-linker,/lib/ld-uClibc.so.0,其中/lib/ld-uClibc.so.0换成你自己的连接器,如果是Makefile这些参数等同与CFLAGS

使用连接器参数,如果是手动连接,可以通过向ld添加--dynamic-linker /lib/ld-uClibc.so.0参数,其实gcc的-Wl就是传递给ld连接器,参数用逗号分割

编译后修改ELF文件

修改ELF文件可以通过PatchELF,具体如果用不做介绍,



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有